package com.bridge.common.enums;

import org.springframework.http.HttpStatus;

/**
 * 自定义状态码
 * <p>
 * 200 成功
 * 1001 - 1999 参数
 * 2001 - 2999 用户
 * 3001 - 3999 权限
 * 4001 - 4999 数据
 * 5001 - 5999 业务
 * 6001 - 6999 接口
 * 7001 - 7999 系统
 */
public enum RSEnum {

	SUCCESS(HttpStatus.OK.value(), "成功"),
    /**
     * 系统错误 SYSTEM_ERROR
     */
    SYSTEM_ERROR(2001, "系统繁忙，请稍后重试"),

    /**
     * 无权限访问 MENU_NOT_FOUNT
     */
    MENU_NOT_FOUNT(2002, "无权限访问"),


    FILE_NOT_FOUNT(2003, "文件找不到"),

    UPLOAD_FOUNT(2004, "上传失败"),
    /**
     * 密码错误，请重新登陆 PASS_WORD_ERROR
     */
    PASS_WORD_ERROR(1004, "密码错误，请输入正确密码"),
    /**
     * 用户名错误，请重新登陆 PASS_WORD_ERROR
     */
    USER_NAME_ERROR(1005, "用户名错误，请重新登陆"),
    /**
     * 找不到门店 STORE_NOT_FOUNT
     */
    STORE_NOT_FOUNT(1006, "找不到门店。"),
    /**
     * 服务师找不到 MASTER_NOT_FOUNT
     */
    MASTER_NOT_FOUNT(1006, "找不到服务师。"),
    /**
     * 服务找不到 SERVICE_NOT_FOUNT
     */
    SERVICE_NOT_FOUNT(1006, "服务找不到。"),
    /**
     * 用户未登录 LOGIN_FAIL
     */
    LOGIN_FAIL(1002, "用户未登录"),
    /**
     * 用户未登录 LOGIN_FAIL
     */
    TOKEN_NOT_FOUNT(1003, "登入已过期"),
    /**
     * 预约已满，请更换预约时间。 APPOINTMENTS_MAX
     */
    APPOINTMENTS_MAX(1007, "预约已满，请更换预约时间。"),
    /**
     * 预约已满，请更换预约时间。 APPOINTMENTS_MAX
     */
    SERVICE_NOT_WITH(1008, "当前服务师与当前选择服务不符"),
    /**
     * 订单找不到 INDENT_NOT_FOUNT
     */
    INDENT_NOT_FOUNT(1009, "订单找不到。"),
    /**
     * 订单状态不匹配 INDENT_STATUS_ERROR
     */
    INDENT_STATUS_ERROR(1009, "订单状态不匹配。"),
    /**
     * 号码错误 PHONE_NUMBER_ERROR
     */
    PHONE_NUMBER_ERROR(1010, "号码错误"),
    /**
     * 验证码错误 PHONE_CODE_ERROR
     */
    PHONE_CODE_ERROR(1010, "验证码错误"),
    /**
     * 60秒内只能发送一次 SMS_SEND_ERROR
     */
    SMS_SEND_ERROR(1011, "60秒内只能发送一次"),

    /**
     * 60秒内只能发送一次 SMS_SEND_ERROR
     */
    ACCOUNT_BALANCE_ERROR(1012, "账户余额不足"),

    /**
     * 重复退款 INDENT_REFUND_ERROR
     */
    INDENT_REFUND_ERROR(1013, "重复退款"),

    /**
     * 服务师门店不能为空 MASTER_STORE_NOT_NULL
     */
    MASTER_STORE_NOT_NULL(1014, "服务师门店不能为空"),

    /**
     * 订单服务核销失败 INDENT_SERVICE_WRITE_OFF_ERROR
     */
    INDENT_SERVICE_WRITE_OFF_ERROR(1015, "订单服务核销失败,或重复核销"),

    /**
     * 排班不存在 ARRANGE_CLASS_NOT_EXIST
     */
    ARRANGE_CLASS_NOT_EXIST(1016, "排班不存在"),

    /**
     * 识别失败 IDENTIFY_FAIL
     */
    IDENTIFY_FAIL(1017, "识别失败"),

    /**
     *  SPACE_NOT_EXIST
     */
    SPACE_NOT_EXIST(1018, "广告位不存在"),
    /**
     *  识别失败，请查看广告 VIEW_ADVERT
     */
    VIEW_ADVERT(1019, "识别失败，请查看广告"),
    /**
     *  广告不存在 ADVERT_NOT_EXIST
     */
    ADVERT_NOT_EXIST(1020, "广告不存在"),
    ;

    private final int status;

    private final String message;

    RSEnum(int status, String message) {
        this.status = status;
        this.message = message;
	}

	public int status() {
		return status;
	}

	public String message() {
		return message;
    }

    public static RSEnum resolve(int statusCode) {
        for (RSEnum rc : values()) {
            if (rc.status == statusCode) {
                return rc;
            }
        }
        return null;
    }

    public static RSEnum resolve(String msg) {
        for (RSEnum rc : values()) {
            if (rc.message.equals(msg)) {
                return rc;
            }
        }
        return SYSTEM_ERROR;
    }


    @Override
    public String toString() {
        return "{\"status\":" + status + ",\"message\":\"" + message + "\"}";
    }
}
